package org.modbus.jlibmodbus;

import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;

import java.net.InetAddress;

/**
 * @Author Jxx     让世界看到我
 * @Create 2022/4/22 9:58
 * @Note TODO
 */
public class JLibModbus {

    public static void run(){
        System.out.println("jlibmodbus.run");

        try {

            //设置主机TCP参数
            TcpParameters tcpParameters = new TcpParameters();

            //设置TCP的IP地址
            InetAddress inetAddress = InetAddress.getByName("127.0.0.1");

            //TCP参数设置IP地址
            //tcpParameters.setHost(InetAddress.getLocalHost());
            tcpParameters.setHost(inetAddress);

            //TCP设置长连接
            tcpParameters.setKeepAlive(true);
            //tcp设置端口,这里使用Modbus的默认端口502
            tcpParameters.setPort(Modbus.TCP_PORT);

            //创建一个主机
            ModbusMaster modbusMaster = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
            //设置自增的id
            Modbus.setAutoIncrementTransactionId(true);

            //从机地址
            int slaveId = 1;
            //寄存器读取开始地址
            int offset = 0;
            //读取寄存器数量
            int quantity = 10;

            if (modbusMaster.isConnected()){
                System.out.println("Modbus主机没有连接,现在建立连接");
                modbusMaster.connect();
            }

            //读取对应从机的数据
            int[] registers = modbusMaster.readInputRegisters(slaveId, offset, quantity);

            for (int register : registers) {
                System.out.println("读取寄存器数据:"+offset++ +"-"+register);
            }

        } catch ( Exception e){
            System.out.println("jlibmodbus运行异常");
            e.printStackTrace();
        }
    }
}
